# -*- coding: utf-8 -*
'''
Created on 25.09.2011

@author: Oleg
'''

'''
Модуль с классами обработчиков
'''

from google.appengine.ext import webapp
from google.appengine.api import users
from google.appengine.ext.webapp import template
from time import sleep
import ConfigParser
import os
import helper
import moduleclasses
from google.appengine.ext import db

class MainHandler(webapp.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'templates/client/index.html')
        self.response.out.write(template.render(path, None))
        
class AddNewsForm(webapp.RequestHandler):
    '''
    Класс-обработчик страницы формы администратора для добавления новой новости.
    
    '''
    def get(self):
        '''
        Метод, показывающий форму добавления новости
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            if self.request.get('newsid') is None or self.request.get('newsid') =='':
                templates = None
            elif self.request.get('newsid') is not None and self.request.get('newsid') !='':
                news = moduleclasses.News.get_by_id(int(self.request.get('newsid')))
                templates={
                'node' : news
                }
            else:
                self.error(404)
            
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/news/addnews.html')
            self.response.out.write(template.render(path, templates))
            
        else:
            self.error(404)
        
    
    def post(self):
        '''
        Метод заносящий в базу данных новую новость из формы добавления новости
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            if self.request.get('actions') == 'add':
                news = moduleclasses.News()
                templates = {
                'actions' : 'add'
                }
            else:
                news = moduleclasses.News.get_by_id(int(self.request.get('id')))
                templates = None
            
            news.title = self.request.get('title')
            news.imageaddr = self.request.get('imageaddr')
            news.content = self.request.get('content')
            news.description = self.request.get('description')
            news.put()
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/news/newsadded.html')
            self.response.out.write(template.render(path, templates))
        else:
            self.error(404)

class AdminForm(webapp.RequestHandler):
    '''
    Главная страница администратора
    '''
    def get(self):
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/admin.html')
            self.response.out.write(template.render(path, None))
        else:
            self.redirect(users.create_login_url(self.request.uri))
    def post(self):
        self.error(404)

class NewsAdminList(webapp.RequestHandler):
    '''
    Список новостей с возможностью редактирования
    '''
    def get(self):
        '''
        Вывод всех новостей на страницу списка редактирования новостей
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            news = helper.getEntities('News')
            templates = {
                'news' : news
            }
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/news/newsadminlist.html')
            self.response.out.write(template.render(path, templates))
        else:
            self.error(404)
    
    def post(self):
        '''
        Удаление новости из администраторского списка новостей
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            id = self.request.get('id')
            if id is not None or id is not '':
                node = moduleclasses.News.get_by_id(int(self.request.get('id')))
                node.delete();
                self.redirect('/newslist')
        else:
            self.error(404)
            
class VacancyAdminList(webapp.RequestHandler):
    '''
    Администратоская работа с вакансиями
    '''
    def get(self):
        '''
        Администраторский список вакансий
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            vacancies = helper.getEntities('Vacancies')
            templates = {
                'vacancies' : vacancies
            }
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/vacancy/vacancyadminlist.html')
            self.response.out.write(template.render(path, templates))
        
    def post(self):
        '''
        Удаление вакансии
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            vacancy = moduleclasses.Vacancy.get_by_id(int(self.request.get('vacancyid')))
            vacancy.delete()
            self.redirect('/joblist')

class AddVacancyForm(webapp.RequestHandler):
    '''
    Форма добавления/редактирования вакансии
    '''
    def get(self):
        '''
        Форма добавления вакансии
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            if self.request.get('vacancyid') is not None and self.request.get('vacancyid') != '':
                vacancy = moduleclasses.Vacancy.get_by_id(int(self.request.get('vacancyid')))
                templates = {
                    'vacancy' : vacancy
                }
            else:
                templates = None
            
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/vacancy/addvacancy.html')
            self.response.out.write(template.render(path, templates))

    def post(self):
        '''
        Сохранение вакансии в БД
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            if self.request.get('actions') == 'add':
                vacancy = moduleclasses.Vacancy()
                
            if self.request.get('actions') == 'edit':
                vacancy = moduleclasses.Vacancy.get_by_id(int(self.request.get('vacancyid')))
        
            vacancy.position = self.request.get('position')
            vacancy.salary = self.request.get('salary')
            vacancy.employment = self.request.get('employment')
            vacancy.education = self.request.get('education')
            vacancy.age = self.request.get('age')
            vacancy.sex = self.request.get('sex')
            vacancy.experience = self.request.get('experience')
            vacancy.description = self.request.get('description')
            vacancy.put()
        
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/vacancy/vacancyadded.html')
            self.response.out.write(template.render(path, None))

class OpinionList(webapp.RequestHandler):
    '''
    Список вопросов и предложений из обратной связи
    '''
    def get(self):
        '''
        Страница со списоком из обратной связи
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            opinions = helper.getEntities('Opinion')
            templates = {
                'opinions' : opinions
            }
            path = os.path.join(os.path.dirname(__file__), 'templates/admin/feedback/opinions.html')
            self.response.out.write(template.render(path, templates))
    
    def post(self):
        '''
        Удаление записи из списка вопросов и предложений
        '''
        user = users.get_current_user()
        if user and user.nickname() == helper.adminLogin():
            opinion = moduleclasses.Opinion.get_by_id(int(self.request.get('opinionid')))
            opinion.delete()
            self.redirect('/opinions')

#
# Начало клиентской части. Перенести в другой модуль.  
#        
class Feedback(webapp.RequestHandler):
    '''
    Форма обратной связи
    '''
    def get(self):
        '''
        Переход на страницу формы обратной связи
        '''
        path = os.path.join(os.path.dirname(__file__), 'templates/client/feedback/feedback.html')
        self.response.out.write(template.render(path, None))
    def post(self):
        '''
        Форма обратной связи
        '''
        opinion = moduleclasses.Opinion()
        opinion.name = self.request.get('name')
        opinion.email = self.request.get('email')
        opinion.opinion = self.request.get('text')
        opinion.ip = os.environ['REMOTE_ADDR']
        
        opinion.put()
        
        path = os.path.join(os.path.dirname(__file__), 'templates/client/feedback/thanksforopinion.html')
        self.response.out.write(template.render(path, None))